package 正则表达式匹配;


import java.util.Spliterator;

//题目描述
//请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符，
// 而'*'表示它前面的字符可以出现任意次（包含0次）。 在本题中，匹配是指字符串的所有字符匹配整个模式。
// 例如，字符串"aaa"与模式"a.a"和"ab*ac*a"匹配，但是与"aa.a"和"ab*a"均不匹配
public class Solution
{
    public boolean match(char[] str,int p1, char[] pattern,int p2)
    {
        //索引与长度，
        if (p1+1==str.length&&p2+1==pattern.length)
            return true;
        if (p1+1<str.length&&p2+1==pattern.length)
            return false;
       else
           {
            //匹配第一个字符
            //下一个字符是否为*
            //1.不为*
            if (pattern[p2 + 1] != '*') {
                if (str[p1] == pattern[p2] || pattern[p2] == '.')
                   return match(str, p1 + 1, pattern, p2 + 1);
                else return false;
            } else {
                if (str[p1] == pattern[p2] || pattern[p2] == '.')
                    return match(str, p1 + 1, pattern, p2 + 2) ||
                            match(str, p1 + 1, pattern, p2);
                else return false;
            }
        }
    }

    public boolean match(char[] str, char[] pattern)
    {
        //判断输入
        if (str==null||pattern==null)
            return false;
        if(str.length==0&&pattern.length==0)
            return true;
        int p1=0;
        int p2=0;
        return match(str,p1,pattern,p2);
    }

    public static void main(String[] args)
    {
        Solution solution = new Solution();
        char[] str="aaabbv".toCharArray();
        char[] pattern="a*bb.".toCharArray();
        System.out.println(solution.match(str,pattern));
    }
}
